/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package thinkinginjava.svn.reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;

/**
 *
 * @author public_enemy
 */
public class ShowMethods {

    private static String usage = "usege:\n"
            + "ShowMethods qualified.class.name\n"
            + "to show all methods in class or:\n"
            + "ShowMethods qualified.class.name.word\n"
            + "To search for methods involving 'word'";
    private static Pattern p = Pattern.compile("\\w+\\.");

    public static void main(String[] args) {
        System.out.println(args);
        if (args.length < 1) {
            System.out.println(usage);
            System.exit(0);
        }
        //String test = "thinkinginjava.svn.reflection.ShowMethods";
        int lines = 0;
        try {
            Class<?> c = Class.forName(args[0]);
            Method[] methods = c.getMethods();
            Constructor[] ctors = c.getConstructors();

            if (args.length == 1) {
                for (Method method : methods) {
                    System.out.println(p.matcher(method.toString()).replaceAll(""));
                }
                for (Constructor ctor : ctors) {
                    System.out.println(p.matcher(ctor.toString()).replaceAll(""));
                }
                lines = methods.length + ctors.length;


            } else {
                for (Method method : methods) {
                    if (method.toString().indexOf(args[1]) != -1) {
                        System.out.println(p.matcher(method.toString()).replaceAll(""));
                        lines++;
                    }
                }
                for (Constructor ctor : ctors) {
                    if (ctor.toString().indexOf(args[1]) != -1) {
                        System.out.println((p.matcher(ctor.toString()).replaceAll("")));
                        lines++;
                    }
                }
            }
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(ShowMethods.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
